#!/usr/bin/python
# -*- coding:utf-8 -*-
# @author  : micah
# @time    :  
# @function: 
# @version :


def my_range(n):
    i = 0
    while i < n:
        value = yield i
        print('print返回：', value)
        i += 1


# 1.创建生成器对象
obj = my_range(4)

print(obj.send(None))  # 如果send方法传递的值是None对象，那么可以放在第一位
print(obj.__next__())
# obj.close()  # 关闭生成器 生成器一旦关闭，则之后的next/send方法无法获取返回值，会抛出异常，StopIteration
print(obj.__next__())

# 通过send方法驱动生成器函数
print(obj.send('双双胖三斤...'))  # send方法可以向生成器函数传递自定义数据
"""
send方法不能在next方法之前运行
"""

"""
1.
    i = 0
    while i < n:
        value = yield i
        
2.
    print(value)
    i += 1
    while i < n:
        value = yield i
        
3.
    send一个字符串信息
    print(value)
    i += 1
    while i < n:
        value = yield i
        
当前生成器的value默认值就是None，当send方法发生信息之后才会改变value的值

"""

print(type(None))


def iter_my_obj(n):
    i = 0
    while i < n:
        yield i
        i += 1


obj = iter_my_obj(3)

for i in obj:
    print(i)
    # 关闭生成器
    obj.close()  # 会抛出StopIteration异常 for会自动处理
